#include <iostream>
#include <fstream>
#include <cstdio>
#include <sstream>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <string>
#include <map>
#include <vector>
#include <set>
#include <queue>
#include <deque>
#include <ctime>
#include <cstdlib>

using namespace std;

#define sz(x) ((int)((x).size()))

typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;

const double EPS = 1e-9;

const int MAXN = (int)(5e4) + 10;

int n;
int x[MAXN], r[MAXN];
double t[4 * MAXN];
double h[MAXN];

void build(int v, int tl, int tr) {
	if (tl == tr) {
		t[v] = h[tl];
	} else {
		int tm = (tl + tr) / 2;
		build(v * 2 + 1, tl, tm);
		build(v * 2 + 2, tm + 1, tr);
		t[v] = min(t[v * 2 + 1], t[v * 2 + 2]);
	}
}

double getMin(int v, int tl, int tr, int lf, int rg) {
	if (lf > rg)
		return 1e18;
	if (tl == lf && tr == rg) {
		return t[v];
	} else {
		int tm = (tl + tr) / 2;
		return min(getMin(v * 2 + 1, tl, tm, lf, min(tm, rg)), getMin(v * 2 + 2, tm + 1, tr, max(lf, tm + 1), rg));
	}
}

void solve() {
	for (int i = 0; i < n; i++) {
		scanf("%d%d", &x[i], &r[i]);
	}
	for (int i = 0; i < n - 1; i++) {
		double p = x[i + 1] - x[i] + r[i] + r[i + 1];
		p *= 0.5;
		double s = sqrt(p * (p - x[i + 1] + x[i]) * (p - r[i]) * (p - r[i + 1]));
		h[i] = s * 2.0 / (x[i + 1] - x[i]);
	}
	if (n == 1) {
		printf("%.10lf\n", sqrt(2.0) * r[0]);
		return;
	}
	double lf = 0.0;
	double rg = 1e5 + EPS;
	for (int it = 0; it < 75; it++) {
		double md = (lf + rg) / 2;
		bool ok = false;
		for (int i = 0; i < n; i++) {
			while (i < n && r[i] < md) i++;
			if (i == n)
				break;
			double cur = md * 2.0 - sqrt(r[i] * 1.0 * r[i] - md * md);
			while (cur > 0 && i < n - 1 && r[i] >= md) {
				if (h[i] >= md) {
					cur -= sqrt(r[i] * 1.0 * r[i] - h[i] * h[i]);
					cur -= sqrt(r[i + 1] * 1.0 * r[i + 1] - h[i] * h[i]);
					i++;
				} else {
					break;
				}
			}
			if (i == n - 1 && r[i] >= md) {
				cur -= sqrt(r[i] * 1.0 * r[i] - md * md);
			}
			if (cur < EPS) {
				ok = true;
				break;
			}
		}
		if (ok)
			lf = md;
		else
			rg = md;
	}
	printf("%.10lf\n", 2.0 * lf);
}

int main() {
	//freopen(".in", "r", stdin);
	//freopen(".out", "w", stdout);

	while (scanf("%d", &n) == 1 && n != 0) {
		solve();
	}

	return 0;
}
